package io.dy.park;
import java.util.concurrent.locks.LockSupport;

import static io.dy.utils.ThreadUtils.*;

/**
 * @author dmj
 * @date 2024年03月29日 下午4:32
 * park 、unPark
 */
public class ParkAndUnPark {

    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            printThreadLog("start...");
            sleepSecond(1);
            printThreadLog("park...");
            LockSupport.park();
            printThreadLog("resume...");
        }, "t1");
        t1.start();

        sleepSecond(2);
        printThreadLog("unPark...");
        LockSupport.unpark(t1);

        // *** park 、 unPark 执行的先后顺序无需关心 可以先unPark 后park
        // 以线程为单位 唤醒指定线程
        //每个线程内部都会维护一个 Parker Parker中包含 _counter、_cond、_mutex ;
    }
}
